package com.autumn.dubbo.spring.boot;

import java.util.LinkedHashMap;
import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ConsumerConfig;
import com.alibaba.dubbo.config.ModuleConfig;
import com.alibaba.dubbo.config.MonitorConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.ProviderConfig;
import com.alibaba.dubbo.config.RegistryConfig;

/**
 * Dubbo properties
 * 
 * @author 老码农
 *
 *         2018-07-03 14:17:39
 */
@ConfigurationProperties(prefix = "spring.dubbo")
public class DubboProperties {
	/**
	 * Indicates dubbo server
	 */
	private boolean server;

	/**
	 * {@link ApplicationConfig} property
	 */
	private ApplicationConfig application;

	/**
	 * {@link ModuleConfig} property
	 */
	private ModuleConfig module;

	/**
	 * {@link RegistryConfig} property
	 */
	private RegistryConfig registry;

	/**
	 * {@link ProtocolConfig} property
	 */
	private ProtocolConfig protocol;

	/**
	 * {@link MonitorConfig} property
	 */
	private MonitorConfig monitor;

	/**
	 * {@link ProviderConfig} property
	 */
	private ProviderConfig provider;

	/**
	 * {@link ConsumerConfig} property
	 */
	private ConsumerConfig consumer;

	/**
	 * Multiple {@link ApplicationConfig} property
	 */
	private Map<String, ApplicationConfig> applications = new LinkedHashMap<String, ApplicationConfig>();

	/**
	 * Multiple {@link ModuleConfig} property
	 */
	private Map<String, ModuleConfig> modules = new LinkedHashMap<String, ModuleConfig>();

	/**
	 * Multiple {@link RegistryConfig} property
	 */
	private Map<String, RegistryConfig> registries = new LinkedHashMap<String, RegistryConfig>();

	/**
	 * Multiple {@link ProtocolConfig} property
	 */
	private Map<String, ProtocolConfig> protocols = new LinkedHashMap<String, ProtocolConfig>();

	/**
	 * Multiple {@link MonitorConfig} property
	 */
	private Map<String, MonitorConfig> monitors = new LinkedHashMap<String, MonitorConfig>();

	/**
	 * Multiple {@link ProviderConfig} property
	 */
	private Map<String, ProviderConfig> providers = new LinkedHashMap<String, ProviderConfig>();

	/**
	 * Multiple {@link ConsumerConfig} property
	 */
	private Map<String, ConsumerConfig> consumers = new LinkedHashMap<String, ConsumerConfig>();

	public boolean isServer() {
		return this.server;
	}

	public void setServer(boolean server) {
		this.server = server;
	}

	public ApplicationConfig getApplication() {
		return this.application;
	}

	public void setApplication(ApplicationConfig application) {
		this.application = application;
	}

	public ModuleConfig getModule() {
		return this.module;
	}

	public void setModule(ModuleConfig module) {
		this.module = module;
	}

	public RegistryConfig getRegistry() {
		return this.registry;
	}

	public void setRegistry(RegistryConfig registry) {
		this.registry = registry;
	}

	public ProtocolConfig getProtocol() {
		return this.protocol;
	}

	public void setProtocol(ProtocolConfig protocol) {
		this.protocol = protocol;
	}

	public MonitorConfig getMonitor() {
		return this.monitor;
	}

	public void setMonitor(MonitorConfig monitor) {
		this.monitor = monitor;
	}

	public ProviderConfig getProvider() {
		return this.provider;
	}

	public void setProvider(ProviderConfig provider) {
		this.provider = provider;
	}

	public ConsumerConfig getConsumer() {
		return this.consumer;
	}

	public void setConsumer(ConsumerConfig consumer) {
		this.consumer = consumer;
	}

	public Map<String, ApplicationConfig> getApplications() {
		return this.applications;
	}

	public void setApplications(Map<String, ApplicationConfig> applications) {
		this.applications = applications;
	}

	public Map<String, ModuleConfig> getModules() {
		return this.modules;
	}

	public void setModules(Map<String, ModuleConfig> modules) {
		this.modules = modules;
	}

	public Map<String, RegistryConfig> getRegistries() {
		return this.registries;
	}

	public void setRegistries(Map<String, RegistryConfig> registries) {
		this.registries = registries;
	}

	public Map<String, ProtocolConfig> getProtocols() {
		return this.protocols;
	}

	public void setProtocols(Map<String, ProtocolConfig> protocols) {
		this.protocols = protocols;
	}

	public Map<String, MonitorConfig> getMonitors() {
		return this.monitors;
	}

	public void setMonitors(Map<String, MonitorConfig> monitors) {
		this.monitors = monitors;
	}

	public Map<String, ProviderConfig> getProviders() {
		return this.providers;
	}

	public void setProviders(Map<String, ProviderConfig> providers) {
		this.providers = providers;
	}

	public Map<String, ConsumerConfig> getConsumers() {
		return this.consumers;
	}

	public void setConsumers(Map<String, ConsumerConfig> consumers) {
		this.consumers = consumers;
	}

	@Override
	public String toString() {
		return "DubboProperties [server=" + this.server + ", application=" + this.application + ", module="
				+ this.module + ", registry=" + this.registry + ", protocol=" + this.protocol + ", monitor="
				+ this.monitor + ", provider=" + this.provider + ", consumer=" + this.consumer + ", applications="
				+ this.applications + ", modules=" + this.modules + ", registries=" + this.registries + ", protocols="
				+ this.protocols + ", monitors=" + this.monitors + ", providers=" + this.providers + ", consumers="
				+ this.consumers + "]";
	}
}
